home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / DDMLWriter$ElemProxy.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  4.5 KB  |  138 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import java.util.Enumeration;
  5.  
  6. public class DDMLWriter$ElemProxy extends DDMLWriter.DeclProxy {
  7.    // $FF: synthetic field
  8.    final DDMLWriter this$0;
  9.    ElementDeclaration decl;
  10.    DDMLWriter.AttrProxy attrProxy;
  11.  
  12.    DDMLWriter$ElemProxy(DDMLWriter var1) {
  13.       super((DDMLWriter)null);
  14.       this.this$0 = var1;
  15.       this.attrProxy = new DDMLWriter.AttrProxy(this.this$0);
  16.    }
  17.  
  18.    DDMLWriter$ElemProxy(DDMLWriter var1, ElementDeclaration var2) {
  19.       super((DDMLWriter)null);
  20.       this.this$0 = var1;
  21.       this.attrProxy = new DDMLWriter.AttrProxy(this.this$0);
  22.       this.setDecl(var2);
  23.    }
  24.  
  25.    void setDecl(ElementDeclaration var1) {
  26.       this.decl = var1;
  27.       super.setDecl(var1);
  28.    }
  29.  
  30.    String getFrequency(char var1) {
  31.       if (var1 == '?') {
  32.          return "Optional";
  33.       } else if (var1 == '+') {
  34.          return "OneOrMore";
  35.       } else if (var1 == '*') {
  36.          return "ZeroOrMore";
  37.       } else {
  38.          Debug.assert(false, "unknown occ char");
  39.          return "";
  40.       }
  41.    }
  42.  
  43.    public void write(SXE var1, boolean var2) {
  44.       var1.writeElem("ElementDecl");
  45.       ((DDMLWriter.DeclProxy)this).writeNameAttr(var1);
  46.       ((DDMLWriter.DeclProxy)this).writeMore(var1, this.decl.getDataType());
  47.       if (var2) {
  48.          ((DDMLWriter.DeclProxy)this).writeComments(var1);
  49.       }
  50.  
  51.       ContentModel var3 = this.decl.getEffectiveModel();
  52.       var1.writeElem("Model", -1);
  53.       this.writeModel(var1, var3);
  54.       var1.flush("Model");
  55.       Enumeration var4 = this.decl.getAttributes(true);
  56.       if (var4.hasMoreElements()) {
  57.          var1.writeElem("AttGroup", -1);
  58.  
  59.          while(var4.hasMoreElements()) {
  60.             AttributeDeclaration var5 = (AttributeDeclaration)var4.nextElement();
  61.             this.attrProxy.setDecl(var5);
  62.             this.attrProxy.writeType(var1, var2);
  63.          }
  64.  
  65.          var1.flush("AttGroup");
  66.       }
  67.  
  68.       var1.flush("ElementType");
  69.    }
  70.  
  71.    void writeRef(SXE var1, String var2, char var3) {
  72.       var1.writeElem("Ref", -1);
  73.       String var4 = DTDUtilities.extractUnqualifiedName(var2);
  74.       String var5 = DTDUtilities.extractPrefix(var2);
  75.       var1.writeAttr("Element", var4);
  76.       if (var5.length() > 0) {
  77.          var1.writeAttr("ElementNS", String.valueOf("URI for prefix ").concat(String.valueOf(var5)));
  78.       }
  79.  
  80.       if (var3 != 0) {
  81.          var1.writeAttr("Frequency", this.getFrequency(var3));
  82.       }
  83.  
  84.       var1.flush("Ref");
  85.    }
  86.  
  87.    void writeTerm(SXE var1, ContentModelTerm var2) {
  88.       if (var2 instanceof ContentModel) {
  89.          ContentModelTermEnum var3 = var2.getTerms(true);
  90.  
  91.          while(var3.hasMoreElements()) {
  92.             this.writeTerm(var1, (ContentModelTerm)var3.nextElement());
  93.          }
  94.       } else if (!var2.isGroup()) {
  95.          this.writeRef(var1, var2.getTerm(), var2.getOccurance());
  96.       } else {
  97.          String var5 = var2.getChildConnection() == '|' ? "Choice" : "Seq";
  98.          var1.writeElem(var5, -1);
  99.          if (var2.getOccurance() != 0) {
  100.             var1.writeAttr("Frequency", this.getFrequency(var2.getOccurance()));
  101.          }
  102.  
  103.          ContentModelTermEnum var4 = var2.getTerms(true);
  104.  
  105.          while(var4.hasMoreElements()) {
  106.             this.writeTerm(var1, (ContentModelTerm)var4.nextElement());
  107.          }
  108.  
  109.          var1.flush(var5);
  110.       }
  111.  
  112.    }
  113.  
  114.    void writeModel(SXE var1, ContentModel var2) {
  115.       if (var2.isAny()) {
  116.          var1.writeElem("Any", true);
  117.       } else if (var2.isEmpty()) {
  118.          var1.writeElem("Empty", true);
  119.       } else if (var2.isTextOnly()) {
  120.          var1.writeElem("PCData", true);
  121.       } else if (var2.isTagsOnly()) {
  122.          this.writeTerm(var1, var2);
  123.       } else if (var2.isMixed()) {
  124.          var1.writeElem("Mixed", -1);
  125.          ContentModelTermEnum var3 = ((ContentModelTerm)var2).getLeafTerms();
  126.  
  127.          while(var3.hasMoreElements()) {
  128.             ContentModelTerm var4 = var3.nextContentModelTerm();
  129.             CMTReferent var5 = var4.getReferent();
  130.             if (var5 instanceof ElementDeclaration) {
  131.                this.writeRef(var1, var4.getTerm(), '\u0000');
  132.             }
  133.          }
  134.       }
  135.  
  136.    }
  137. }
  138.